/*
 * Copyright 2002-2012 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.Aware;

/**
 * 任何希望被通知它运行的 {@link ApplicationContext} 的对象要实现的接口。
 *
 * <p>例如，当一个对象需要访问一组协作 bean 时，实现这个接口是有意义的。请注意，通过 bean 引用进行配置比仅出于 bean 查找目的实现此接口更可取。
 *
 * <p>如果对象需要访问文件资源，即想要调用 {@code getResource}、想要发布应用程序事件或需要访问 MessageSource，
 * 也可以实现此接口。但是，在这种特定场景中，最好实现更具体的 {@link ResourceLoaderAware}、
 * {@link ApplicationEventPublisherAware} 或 {@link MessageSourceAware} 接口。
 *
 * <p>请注意，文件资源依赖项也可以作为 {@link org.springframework.core.io.Resource} 类型的 bean 属性公开，
 * 通过由 bean 工厂自动类型转换的字符串填充。这消除了为了访问特定文件资源而实现任何回调接口的需要。
 *
 * <p>{@link org.springframework.context.support.ApplicationObjectSupport} 是应用程序对象的便利基类，实现了这个接口。
 *
 * <p>有关所有 bean 生命周期方法的列表，请参阅 {@link org.springframework.beans.factory.BeanFactory BeanFactory javadocs}。
 *
 * @author Rod Johnson
 * @author Juergen Hoeller
 * @author Chris Beams
 * @see ResourceLoaderAware
 * @see ApplicationEventPublisherAware
 * @see MessageSourceAware
 * @see org.springframework.context.support.ApplicationObjectSupport
 * @see org.springframework.beans.factory.BeanFactoryAware
 */
public interface ApplicationContextAware extends Aware {

	/**
	 * 设置此对象运行所在的 ApplicationContext。通常此调用将用于初始化对象。
	 * <p>在填充普通 bean 属性之后但在初始化回调之前调用，例如 {@link org.springframework.beans.factory.InitializingBean#afterPropertiesSet()}
	 * 或自定义初始化方法。在 {@link ResourceLoaderAware#setResourceLoader}、{@link ApplicationEventPublisherAware#setApplicationEventPublisher}
	 * 和 {@link MessageSourceAware}（如果适用）之后调用。
	 * @param applicationContext 此对象要使用的 ApplicationContext 对象
	 * @throws ApplicationContextException 在上下文初始化错误的情况下
	 * @throws BeansException 如果由应用程序上下文方法抛出
	 * @see org.springframework.beans.factory.BeanInitializationException
	 */
	void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

}
